package baseClass;

import org.antlr.v4.runtime.tree.ParseTree;

import java.util.ArrayList;

public class BaseParseTree implements ParseTreeInterface {

    private BaseParseTree parent;
    //孩子数量
    private int childCount;
    //孩子列表
    private ArrayList<BaseParseTree> children;
    //当前语法的下标，可以通过这个知道是什么语法
    private int parseTypeIndex;
    //当前语法的类型，表示这是什么语法，可以通过parseTypeIndex得到
    private String parseType;
    //是否是终结节点，即没有叶子节点的节点，也就是词法节点
    private boolean isTerminal;
    //非终结节点的类型是BaseParseTree，终结节点的类型是BaseToken，这个就是终结节点
    private BaseToken terminalNode;
    //这是构造器，忽视即可
    public BaseParseTree(BaseParseTree parent,int parseTypeIndex,String parseType){
        this.parent=parent;
        this.parseTypeIndex=parseTypeIndex;
        this.parseType=parseType;
    }
    //同样构造器，忽视即可
    public BaseParseTree(BaseParseTree parent,BaseToken baseToken){
        this.parent=parent;
        this.terminalNode=baseToken;
        this.isTerminal=true;
    }

    @Override
    public void dfs() {
    //我要写的
    }

    @Override
    public void level() {
    //我要写的
    }

    @Override
    public ParseTreeInterface getChild(int index) {
        return null;
    }

    @Override
    public void execute() {

    }
    public void addNewChild(BaseParseTree child){
        if(this.children==null)
            this.children=new ArrayList<>();
        this.children.add(child);
    }
    @Override
    public String getText() {
        return null;
    }

    @Override
    public int getChildCount() {
        return children.size();
    }

    public BaseParseTree getParent() {
        return parent;
    }

    public ArrayList<BaseParseTree> getChildren() {
        return children;
    }

    public int getParseTypeIndex() {
        return parseTypeIndex;
    }

    public String getParseType() {
        return parseType;
    }
    //判断是否是终结节点
    public boolean isTerminal() {
        return isTerminal;
    }

    public BaseToken getTerminalNode() {
        return terminalNode;
    }
}
